
//1905.统计子岛屿
class Solution {
public:
    int countSubIslands(vector<vector<int>>& grid1, vector<vector<int>>& grid2) {
        int n=grid1.size(),m=grid1[0].size();
        int dx[]={0,0,1,-1};
        int dy[]={1,-1,0,0};

        int ans=0,flag=1;
        function<void(int,int)> dfs=[&](int x,int y)
        {
            grid2[x][y]=-1;     //对已经遍过的位置进行标记
            if(grid1[x][y]!=1) flag=0;   //grid1中没有该区域,该区域不是子岛屿
            for(int k=0;k<4;k++)
            {
                int a=x+dx[k],b=y+dy[k];
                if(a>=0&&a<n&&b>=0&&b<m&&grid2[a][b]==1) dfs(a,b);
            }
        };

        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(grid2[i][j]>0) 
                {
                    flag=1;
                    dfs(i,j);
                    if(flag) ans++;
                }
            }
        }
        return ans;
    }
};